package com.example.demo;

import com.sun.org.glassfish.gmbal.ParameterNames;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-04-19
 * Time: 17:43
 */
//@Controller // 加在类上让类随着 Spring 的启动而加载
//@ResponseBody // 设置响应返回的为信息, 不是视图, 如果加在类上表示当前类中的所有方法
//  返回的都是非静态页面的数据
@RestController // @Controller 和 @ResponseBody 的组合注解
//@RequestMapping("/test")  localhost: 8080:/test/say
public class TestController {
//    @RequestMapping(value = "/say", method = RequestMethod.POST) // 设置指定的请求方式, 除此方式外其他方式都访问不了, 报错405(方法不被允许)
//    // localhost:8080:/say
//    // 支持get post 等其他类型的请求
//    public String say() {
//        // 默认返回的是视图
//        return "first Spring";
//    }

//    @GetMapping("/sayhi")
//    public String sayHi(String name) {
//        return "他只支持post请求的连接" + name;
//    }
//
//    @RequestMapping("/say1")
//    public String say1(Integer id) { // 包装类默认值为 null, 参数传递时, 最好不要使用基础数据类型, 不传参时会报错
//        return "这是 Id = " + id;
//    }
//
//    @RequestMapping("/say2")
//    public String say2(int id) { // 基本数据类型没有默认值, 不给定值则会报错500
//        return "这是 Id = " + id;
//    }
//
//    @RequestMapping("/say3")
//    public String say3(HttpServletRequest request, HttpServletResponse response) {
//        return "say3" + " " + request.getRequestURI() + " " + request.getParameter("id");
//    }
//
//    @RequestMapping("/reg")  // @RequestParam 重命名注解 - 只能在多参数下
//                             // required 属性默认为 true 重命名的这个参数必须有, 否则就会报错, 但是可以设置为 false
//                             // 相当于前端传来的是 username, 获取后赋值为后端的 name 上
//    public Object reg(@RequestParam("username") String name, String password) {
//        return "name : " + name + " password : " + password;
//    }



    // 1. 得到日志对象 -- 类级别的, 并非方法级别只能在该方法下使用\
    //    日志一定是私有的, 不同的类下的日志信息不同, 日志输出时会打印在那个类下, 因此只归属于一个类
    // 静态的 期望他在类里可以方便的使用, 并且不希望别人进行改动
    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @RequestMapping("/loggin")
    public void log() {
        log.trace("这是一个痕迹级别日志");
        log.debug("这是一个调试级别日志");
        log.info("这是一个普通级别日志");
        log.warn("这是一个警告级别日志");
        log.error("这是一个错误级别日志");
    }

}
